package com.java.big_data;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Random;

public class BigIntegerAPI {
    public static void main(String[] args) {
        // 创建对象
        BigInteger bigInteger1 = new BigInteger("16"); // 指定大整数
        BigInteger bigInteger2 = new BigInteger(16, new Random()); // 随机大整数，范围为[0, 2^numBits - 1]，numBits为参数1
        
        // 常量池范围为[-16,16]
        BigInteger bigInteger3 = BigInteger.valueOf(16);
        BigInteger bigInteger4 = BigInteger.valueOf(16);
        System.out.println(bigInteger3 == bigInteger4); // true
        
        BigInteger bigInteger5 = BigInteger.valueOf(17);
        BigInteger bigInteger6 = BigInteger.valueOf(17);
        System.out.println(bigInteger5 == bigInteger6); // false
        
        // valueOf：转BigInteger
        System.out.println(BigInteger.valueOf(16)); // 16
        
        // equals：比较两大整数是否相同
        System.out.println(bigInteger3.equals(bigInteger4)); // true
        System.out.println(bigInteger5.equals(bigInteger6)); // true
        
        // max/min：取两大整数最大/小值
        System.out.println(bigInteger3.max(bigInteger5)); // 17
        System.out.println(bigInteger3.min(bigInteger5)); // 16
        
        // add：两大整数相加
        System.out.println(bigInteger3.add(bigInteger4)); // 32
        
        // subtract：两大整数相减
        System.out.println(bigInteger3.subtract(bigInteger4)); // 0
        
        // multiply：两大整数相乘
        System.out.println(bigInteger3.multiply(bigInteger4)); // 256
        
        // divide：两大整数相除取商
        System.out.println(bigInteger3.divide(bigInteger4)); // 1
        
        // divideAndRemainder：两大整数相除取商和余
        System.out.println(Arrays.toString(Arrays.stream(bigInteger3.divideAndRemainder(bigInteger4)).toArray())); // 1 0
        
        // pow：取大整数的参数次幂
        System.out.println(bigInteger3.pow(2)); // 256
    }
}
